package com.bestcem.xm.user.service;

import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.user.grpc.service.param.OpenGroupTreeByAsyncParam;
import com.bestcem.xm.user.grpc.service.param.OpenGroupTreeParam;
import com.bestcem.xm.user.service.dto.PageResponseDTO;
import com.bestcem.xm.user.service.dto.group.IdRelationDTO;
import com.bestcem.xm.user.service.dto.group.UserGroupDTO;

import java.util.List;
import java.util.Map;

/**
 * 用户层级业务service
 *
 * @author wangyunyun <yunyun.wang@idiaoyan.com>
 * @version v1.0
 * @date 2021/12/29 10:30
 */
public interface UserGroupBusinessService {

    /**
     * 返回指定的两个公司层级名称相同的id对
     *
     * @param srcOrgId 源公司id
     * @param dstOrgId 目标公司id
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/1/21 14:00
     */
    ServiceResult<List<IdRelationDTO>> listSampleGroupLevelIds(String srcOrgId, String dstOrgId);

    /**
     * 返回指定的两个公司组织名称和seq相同的id对
     *
     * @param srcOrgId 源公司id
     * @param dstOrgId 目标公司id
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/1/21 14:30
     */
    ServiceResult<List<IdRelationDTO>> listSampleGroupIds(String srcOrgId, String dstOrgId);

    /**
     * 用户组织层级sample的拷贝
     *
     * @param srcOrgId 源租户id
     * @param dstOrgId 目标租户id
     * @return com.bestcem.xm.util.ServiceResult<java.util.Map < java.lang.String, java.lang.String>>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/01/24 14:57
     */
    ServiceResult<Map<String, String>> copySample(String srcOrgId, String dstOrgId);

    /**
     * 根据用户组id列表分页获取指定层级上的子用户列表
     *
     * @param groupLevelId 层级id
     * @param groupIdsList 组织id列表
     * @param currentPage  第几页
     * @param pageSize     每页大小
     * @return com.bestcem.xm.util.ServiceResult
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/01/24 15:13
     */
    ServiceResult<PageResponseDTO<UserGroupDTO>> pageSubRelateGroups(String groupLevelId, List<String> groupIdsList,
                                                                     Integer currentPage, Integer pageSize);

    /**
     * 查询当前租户组织层级是否可编辑
     *
     * @param orgId 租户Id
     * @return boolean true：已被锁定、false：未被锁定
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date 2022/02/08 11:30
     */
    ServiceResult<Boolean> getLock(String orgId);

    /**
     * 开放平台的层级更新
     *
     * @param param 更新参数
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/2/17 13:47
     */
    ServiceResult<String> updateOpenGroupTree(OpenGroupTreeParam param);

    /**
     * 开放平台的层级异步更新
     *
     * @param param 更新参数
     * @return ServiceResult<String>
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2022/4/21 10:05
     */
    ServiceResult<String> updateOpenGroupTreeByAsync(OpenGroupTreeByAsyncParam param);

    /**
     * 根据指定的userId和orgId查询用户所在的组列表信息
     *
     * @param userId 用户id
     * @param orgId  公司id
     * @return com.bestcem.xm.util.ServiceResult<java.util.List < com.bestcem.xm.user.service.dto.group.UserGroupDTO>>
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/06/08 17:27
     */
    ServiceResult<List<UserGroupDTO>> getUserGroups(String userId, String orgId);

    /**
     * 旧版开放平台组织层级更新
     *
     * @param param
     * @return com.bestcem.xm.util.ServiceResult<java.lang.String>
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/07/15 10:32
     */
    ServiceResult<Boolean> updateOpenGroupTreeV1(OpenGroupTreeParam param);
}
